#include<iostream>
using namespace std;

class SquareMatrix
{
    private:
        int dimension;
        double* matrix_elements;//动态内存分配，不要依赖缺省构造函数
    public:
	SquareMatrix()//显示缺省构造函数
	{
	    dimension = 0;
	    matrix_elements = NULL;//更好的是nullptr但我的g++不支持
	}
	SquareMatrix(int _d)//类名，无返回，构造函数，可重载
	{
	    allocMem(_d);
	}
	inline void allocMem(int _d)//方便提供相同函数，inline在编译阶段解决复制函数
	{
	    dimension = _d;
	    matrix_elements = new double [_d * _d];
	}    
        void reinit(int _d)//可不加此功能，与构造函数相同，调用allocMem更好
	{
	    allocMem(_d);
	}
	
	int get_dimension()
	{
	    return dimension;
	}
	double get_matrix_elements(int _i, int _j);
	void set_matrix_elements(int _i, int _j, double _v);
	void delMem()//给用户提供销毁功能，析构函数可直接调用
	{
	    delete [] matrix_elements;
	    matrix_elements = NULL;
	    dimension = 0;
	}
	~SquareMatrix()//~类名，无返回,析构函数,注意波浪号为英文，否则报错
	{
	    delMem();
	}
	    
};


double SquareMatrix::get_matrix_elements(int _i, int _j)//外部格式
{
    return  *(matrix_elements + (_i * dimension + _j));
}

void SquareMatrix::set_matrix_elements(int _i, int _j, double _v)
{
    matrix_elements[_i * dimension + _j] = _v;
}
